package br.ufc.si.sax;

import java.io.IOException;
import java.util.ArrayList;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

import br.ufc.si.model.Despesas;

public class ConsultarGastosComOrgao extends DefaultHandler{
	private Despesas despesas = new Despesas();
	private ArrayList<Despesas> listDespesas = new ArrayList<Despesas>();
	private String temp;

	public ArrayList<Despesas> ListarDespesa(String codigoMunicipio,
			String ano, String codigoOrgao) {
		Parse(codigoMunicipio, ano, codigoOrgao);
		return listDespesas;

	}

	private void Parse(String codigoMunicipio, String ano, String codigoOrgao) {
		SAXParserFactory spf = SAXParserFactory.newInstance();
		SAXParser parser;
		try {

			parser = spf.newSAXParser();
			parser.parse(
					"http://api.tcm.ce.gov.br/sim/1_0/despesa_categoria_economica.xml?codigo_municipio="
							+ codigoMunicipio
							+ "&exercicio_orcamento="
							+ ano
							+ "&codigo_orgao=" + codigoOrgao, this);

		} catch (SAXException e) {
			System.out.println("SAX exception = [[" + e.getMessage() + "]]");
		} catch (IOException e) {
			System.out.println("I/O exception = [[" + e.getMessage() + "]]");
		} catch (ParserConfigurationException e) {
			System.out.println("ParserConfig exception = [[" + e.getMessage()
					+ "]]");
		}

	}

	public void startElement(String uri, String localName, String qName,
			Attributes attributes) throws SAXException {

		if (qName.equalsIgnoreCase("codigo_municipio")) {
			despesas = new Despesas();
			despesas.setCodigo_municipio((attributes
					.getValue("codigo_municipio")));
		}
	}

	public void characters(char[] buffer, int start, int length)
			throws SAXException {
		temp = new String(buffer, start, length);
	}

	public void endElement(String uri, String localName, String qName)
			throws SAXException {
		if (qName.equalsIgnoreCase("despesa_categoria_economica")) {
			// add it to the list
			listDespesas.add(despesas);

		} else if (qName.equalsIgnoreCase("codigo_municipio")) {
			despesas.setCodigo_municipio(temp);

		} else if (qName.equalsIgnoreCase("codigo_orgao")) {
			despesas.setCodigo_orgao(temp);
		}

		else if (qName.equalsIgnoreCase("exercicio_orcamento")) {
			despesas.setExercicio_orcamento(temp);
		}

		else if (qName.equalsIgnoreCase("valor_total_fixado")) {
			despesas.setValor_total_fixado(Double.parseDouble(temp));
		}

		else if (qName.equalsIgnoreCase("nome_elemento_despesa")) {
			despesas.setNome_elemento_despesa(temp);
		}

	}
}
